package com.cwt_taxi_xa.protocol.card.cmd;

import com.cwt_taxi_xa.util.AppLog;
import com.cwt_taxi_xa.util.DateUtil;
import com.cwt_taxi_xa.util.Tools;

import java.io.UnsupportedEncodingException;
/**
 * 基础信息
 * @author Administrator
 *
 */
public class CardInfoEF08 extends BaseCmd<AckCallBack> {

	final String TAG = "CardInfoEF08";

	//总包大小
	private int pcfileSize = 334;
	//当前数据包
	private int dataIndex = 0;

	public CardInfoEF08(String cmdTag) {
		super(cmdTag);
		dataIndex = 1;
	}



	public CardInfoEF08(String cmdTag, AckCallBack ackCallBack) {
		super(cmdTag, ackCallBack);
		dataIndex = 1;
		// TODO Auto-generated constructor stub
	}



	@Override
	public String data() {
		// TODO Auto-generated method stub
		return "02 EF08 01 0000 "  + Tools.parseByte2HexStr(Tools.int2Bytes2(dataLength, 2));
	}

	public String data(int start,int size) {
		// TODO Auto-generated method stub
		//
		return "02 EF08 01 "+ Tools.parseByte2HexStr(Tools.int2Bytes2(start, 2)) +" " +  Tools.parseByte2HexStr(Tools.int2Bytes2(size, 2));//0104[260] /022C[556 ]
	}


	@Override
	public void decode(byte[] order) {
		// TODO Auto-generated method stub
		saveCacheData(order);
		if(lastIndexIsNull(order)){
			//异常读卡解析结束
			AppLog.d(TAG,"符合非空判断,执行解析数据");
			dataInfo();
			//pcfileSize不足不处理
		}else{
			//读取下一包数据
			readOnePackage();
		}
	}

	private void readOnePackage(){
		AppLog.d(TAG,"readOnePackage fileDataIndex:" + dataIndex + " count:" + (pcfileSize/dataLength) + " dataLength:" + dataLength);
		if(dataIndex <pcfileSize/dataLength){
			ackCallBack.sendCmd(cmd(),data(dataIndex * dataLength,dataLength));//读取第一个包
			dataIndex ++ ;
		}else if(dataIndex <= (pcfileSize/dataLength)){
			ackCallBack.sendCmd(cmd(),data(dataIndex * dataLength,pcfileSize - (dataIndex * dataLength)));//读取最后一包
			dataIndex ++ ;
		}else{
			//正常读卡解析
			AppLog.e(TAG,"服务管理数据读卡结束");
			dataInfo();
		}
	}

	private void dataInfo(){

		try {
			String str = new String(substringSecondLastNull(cacheData), "GBK");
			String[] ss = str.split(",");
			AppLog.d("----------------------------------------------------------" + Tools.parseByte2HexStr(substringSecondLastNull(cacheData)));
			AppLog.d("数量：" + ss.length);
			AppLog.savelog(str);
			AppLog.d("----------------------------------------------------------");
			for (int i = 0; i < ss.length; i++) {
				AppLog.d(" " + (i + 1) + ": " + ss[i]);
			}
			AppLog.d("----------------------------------------------------------");
			if (ss.length >= 20) {
				// 1	学期号	14	字符串
				// 2	学号	8	字符串
				// 3	身份证号码	38	字符串
				// 4	从业资格证号	38	字符串
				// 5	姓名	18	字符串
				// 6	地址	52	字符串，最多25个汉字
				// 7	年龄	6	字符串
				// 8	政治面貌	4	字符串（1 党员，2 团员，3群众，4 其他）
				// 9	年度审核状态	4	数字  0 不合格  1 合格
				// 10	从业资格证类别	4	字符串（0巡游、1 网约）
				// 11	驾照号	38	字符串
				// 12	驾驶员性质	4	字符串（0 聘用，1 车主）
				// 13	驾照档案编号	24	字符串
				// 14	驾照签发日期	18	字符串,YYYYMMDD
				// 15	资格证初次发证日期	18	字符串,YYYYMMDD
				// 16	发证日期	18	字符串,YYYYMMDD
				// 17	资格证有效期	18	字符串,YYYYMMDD
				// 18	从业资格证状态	4	数字  0 未激活；  1 激活
				// 19	监督电话	12	字符串 （12345）
				// 20	服务星级	4	数字  1:A；2:AA; 3:AAA;
				// 21	预留	1704	字符串
				if("0".equals(ss[17])){
					AppLog.d(TAG,"从业资格证未激活，无法签到签退");
					ackCallBack.error(cmdTag,0, "从业资格证未激活，无法签到签退");
					return;
				}else if(DateUtil.date_compare(ss[16],DateUtil.getTodayDateDf9()) == -1){
					AppLog.d(TAG,"从业资格证有效期已过期,请速与审批大厅联系");
					ackCallBack.error(cmdTag,0, "从业资格证有效期已过期,请速与审批大厅联系");
					return;
				}else if("0".equals(ss[8])){
					AppLog.d(TAG,"从业资格证年审不合格,请速与审批大厅联系");
					ackCallBack.error(cmdTag,0, "从业资格证年审不合格,请速与审批大厅联系");
					return;
				}

				if(ackCallBack != null){
					ackCallBack.callBack(cmdTag, ss);
				}
				if(ss != null && ss.length > 20){
					AppLog.e(TAG, "预留数据未处理!***********************");
				}
			} else {
				ackCallBack.error(cmdTag, 1, "服务管理数据异常");
				AppLog.e(TAG, "服务管理数据异常!" + (ss == null ? "ss is null" : "ss.length:" + ss.length));
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			AppLog.e(TAG, e.getMessage());
			if(ackCallBack != null){
				ackCallBack.error(cmdTag,1,"基本信息编码错误");
			}
		}
	}
}
